public class Solution {
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] arr = new int[]{5, 5, 10, 20, 20, 20};
        System.out.println(s.lemonadeChange(arr));
    }

    public boolean lemonadeChange(int[] bills) {
        /**
         * 柠檬水找零
         *
         * 解题思路：
         *  使用分类讨论的思路进行解题
         *  1，收到5元：无需找零，5计数++
         *  2，收到10元：判断是否有5元，有则5计数--，10计数++，没有则返回false
         *  3，收到20元：判断是否有10元和5元，有则5计数--，10计数--，20计数++，没有则返回false
         *  */
        // 1 预处理
        // -创建int[3] count 数组作为计数器，其中count[0]表示5元纸币数量，count[1]表示10元纸币数量，count[2]表示20元纸币数量
        int[] count = new int[3];

        // 2 遍历账单
        for(int e: bills) {
            if(e == 5) {
                count[0] ++;
            } else if(e == 10 && count[0] != 0) {
                count[0] --;
                count[1] ++;
            } else if(e == 20) {
                // -优先使用10元
                if(count[0] > 0 && count[1] > 0) {
                    count[0] --;
                    count[1] --;
                } else if(count[0] >= 3) {
                    count[0] -= 3;
                } else {
                    return false;
                }
                count[2] ++;
            } else {
                return false;
            }
        }

        // 3 返回值
        return true;
    }
}
